/**
 * 全局错误处理中间件
 * 统一处理应用中的错误并返回标准化的错误响应
 */

import logger from "../utils/logger.js";

function errorMiddleware(err, req, res, next) {
	// 获取错误状态码，默认为500
	const code = err.statusCode || err.status || 500;

	// 获取错误信息
	const message = err.message || "服务器内部错误";

	// 生成请求标识符，帮助追踪问题
	const requestId =
		req.id || `req-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;

	// 构建错误日志信息
	const logMessage = `[${req.method}] ${req.path} - ${code} - ${message} (${requestId})`;

	// 记录错误日志到文件
	logger.error(logMessage, err);

	// 如果res对象上有serverError方法(由response中间件添加)，则使用它
	// if (typeof res.serverError === "function") {
	// 	return res.serverError(message);
	// }

	// 返回标准化的错误响应
	res.status(code).json({
		code,
		success: false,
		message,
		requestId,
		data: null,
		// 在开发环境下返回错误堆栈信息
		...(process.env.NODE_ENV === "development" && { stack: err.stack }),
	});
}

export default errorMiddleware;